package com.zhang.common.core.exception.base;

/**
 * @Class com.zhang.common.core.exception.base
 * @Author zhang
 * @Date 2025/9/11 17:29
 * @Description 基础异常
 **/
public class BaseException extends RuntimeException {

    /**
     * 序列化序号
     */
    private static final long serialVersionUID = -7339995840698718204L;

    /**
     * 所属模块
     */
    private String module;

    /**
     * 错误码
     */
    private String code;

    /**
     * 错误码对应的参数
     */
    private Object[] args;

    /**
     * 错误消息
     */
    private String defaultMessage;

    /**
     * 构造函数初始化
     *
     * @param module 所属模块
     * @param code 错误码
     * @param args 错误码对应的参数
     * @param defaultMessage 错误消息
     */
    public BaseException(String module, String code, Object[] args, String defaultMessage) {
        this.module = module;
        this.code = code;
        this.args = args;
        this.defaultMessage = defaultMessage;
    }

    /**
     * 构造函数初始化
     *
     * @param module 所属模块
     * @param code 错误码
     * @param args 错误码对应的参数
     */
    public BaseException(String module, String code, Object[] args) {
        this(module, code, args, null);
    }

    /**
     * 构造函数初始化
     *
     * @param module 所属模块
     * @param defaultMessage 错误消息
     */
    public BaseException(String module, String defaultMessage) {
        this(module, null, null, defaultMessage);
    }

    /**
     * 构造函数初始化
     *
     * @param code 错误码
     * @param args 错误码对应的参数
     */
    public BaseException(String code, Object[] args) {
        this(null, code, args, null);
    }

    /**
     * 构造函数初始化
     *
     * @param defaultMessage 错误消息
     */
    public BaseException(String defaultMessage) {
        this(null, null, null, defaultMessage);
    }

    /**
     * 获取所属模块
     *
     * @return 返回所属模块
     */
    public String getModule() {
        return module;
    }

    /**
     * 获取错误码
     *
     * @return 返回错误码
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取错误码对应的参数
     *
     * @return 返回错误码对应的参数
     */
    public Object[] getArgs() {
        return args;
    }

    /**
     * 获取错误消息
     *
     * @return 返回错误消息
     */
    public String getDefaultMessage() {
        return defaultMessage;
    }

}
